﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using Talento21.Modelo;

namespace Talento21.Negocio.Servicio
{
    public class SrvUsuario
    {

        SysGestion21Entities db;

        public SrvUsuario()
            : this(new SysGestion21Entities())
        {

        }

        public SrvUsuario(SysGestion21Entities context)
        {
            db = context;
        }

        public static class RolUsuario
        {
            public const int Consultora = 1;
            public const int Empresa = 2;
            public const int Trabajador = 3;
            public const int Evaluador = 4;
        }

        public void Crear(InfUsuario usuario)
        {
            db.AddToInfUsuario(usuario);
            db.SaveChanges();
        }

        public Boolean ValidarUsuario(string usuario, string password)
        {

            var usuarioValido = (from usuarioBuscado in db.InfUsuario where usuarioBuscado.Usuario == usuario && usuarioBuscado.Password == password select usuarioBuscado).Count();
            return (usuarioValido > 0);

        }

        public InfUsuario ObtenerUsuario(string usuario)
        {
            return (from usu in db.InfUsuario where usu.Usuario == usuario select usu).FirstOrDefault();
            
        }

        public Boolean ValidaExisteNombreUsuario(string usuario)
        { 
          var usuarioValido = (from usuarioBuscado in db.InfUsuario where usuarioBuscado.Usuario.ToUpper()  == usuario.ToUpper() select usuarioBuscado ).Count();
          return (usuarioValido > 0);
        }


        public List<InfUsuario>  ObtenerUsuariosAdminPorRut(int rutEmpresa)
        {
            return (from usuario in db.InfUsuario where usuario.Emp_Rut == rutEmpresa && usuario.Id_Tipo_Usuario == RolUsuario.Empresa select usuario).ToList();
        }

        public void Actualizar(InfUsuario usuario)
        {
            db.ObjectStateManager.ChangeObjectState(usuario, System.Data.EntityState.Modified);
            db.SaveChanges();
        }

        internal InfUsuario ObtenerUsuarioPorRut(int rut)
        {
            return (from usuario in db.InfUsuario where usuario.InfPersonas.Rut == rut && usuario.Id_Tipo_Usuario == RolUsuario.Trabajador select usuario).FirstOrDefault();
        }
    }
}